from machine import UART
import sensor, image, time 
from pyb import LED
import math

class UartCommend:
    def __init__(self, uart_port=1, baudrate=115200):
        """初始化 UART，设置帧头和帧尾，波特率等"""
        self.frame_header = b'\xff\xfe'  # 帧头
        self.frame_tail = b'\xfe\xff'    # 帧尾
        self.uart = UART(uart_port, baudrate)  # 初始化 UART
        self.uart.init(baudrate, bits=8, parity=None, stop=1)  # 配置 UART 参数

    def send_uart_data(self, data, frame_header=None, frame_tail=None):
        """发送数据到 UART，并加上帧头和帧尾"""
        # 使用默认帧头和帧尾，如果提供了新的帧头和帧尾则使用它们
        if frame_header is None:
            frame_header = self.frame_header
        if frame_tail is None:
            frame_tail = self.frame_tail
        
        # 确保 data 是 bytearray 类型，并发送
        data = bytearray(frame_header + bytearray([data]) + frame_tail)
        self.uart.write(data)

    def get_uart_data(self):
        """接收并解析 UART 数据"""
        data = self.uart.read()
        if data:
            # 查找帧头和帧尾
            start = data.find(self.frame_header)
            end = data.find(self.frame_tail, start + len(self.frame_header))
            if start != -1 and end != -1:
                # 提取帧头和帧尾之间的有效数据
                return data[start + len(self.frame_header):end]
        return None

class Camera:
    def __init__(self, roi=(80, 80, 120, 120), pixformat=sensor.RGB565, framesize=sensor.QVGA):
        """初始化相机，设置分辨率、颜色格式、ROI区域和LED"""
        self.roi = roi  # 设ROI区域 (x, y, w, h)
        self.sensor = sensor  # 使用传入的传感器对象
        # 初始化相机
        self.sensor.reset()  # 重置并初始化相机
        self.sensor.set_pixformat(pixformat)  # 设置图像格式
        self.sensor.set_framesize(framesize)  # 设置图像分辨率
        self.sensor.skip_frames(time=2000)  # 等待设置生效

    def get_image(self):
        """获取并返回一帧图像，裁剪ROI区域并绘制矩形框"""
        img = self.sensor.snapshot()  # 捕获一帧图像
        
        # 绘制ROI区域的矩形框
        img.draw_rectangle(self.roi, color=(255, 0, 0), thickness=1)
        
        # 从图像中裁剪出ROI区域
        img_roi = img.crop(self.roi)

        # 返回裁剪后的图像和FPS值
        return img_roi



